import copy

# -----集合-----
A = {"python", 123, ("python", 123)}  # 使用 {} 建立集合
print(A)
# 使用 set() 建立集合
B = set("pyy223")
print(B)

# -----列表 其他语言叫数组-----
bicycles = ['trek', 'redline', 'specialized']
# 通过索引进行访问 正向从 0 开始， -1 从负方向开始
print("bicycles[1] =", bicycles[1])
print("bicycles[-1] =", bicycles[-1])
# 列表切片
print('列表切片', bicycles[-2:])
# 步进为 2 的切片
print('步进为 2', bicycles[0:3:2])

print(bicycles[::-1])

# 修改元素
bicycles[0] = 'fei'

# 查询
print('"fei" in bicycles', "fei" in bicycles)
# 查到元素的下标并返回
print('bicycles.index("fei")', bicycles.index("fei"))

# 在列表末尾添加元素
bicycles.append('duc')
print(bicycles)
# 在列表中插入元素
bicycles.insert(0, 'duc')
print(bicycles)

# 列表中删除元素
# 直接删
del bicycles[4]
# 方法 remove() 只删除第一个指定的值。如果要删除的值可能在列表中出现多次，就需要使用循环来判断是否删除了所有这样的值
bicycles.remove('duc')
print(bicycles)
# 方法 pop()可删除列表末尾的元素
bicycles.pop()
print(bicycles)

# sort() 将对列表永久性排序
bicycles.sort()
bicycles.sort(reverse=True)

# 使用函数 sorted()对列表进行临时排序，调用函数sorted()后，列表元素的排列顺序并没有变
print(sorted(bicycles))

# 方法 reverse()永久性地修改列表元素的排列顺序
bicycles.reverse()
print("reverse = ", bicycles)

# 嵌套列表的遍历
col1 = [22, 99, 44]
col2 = [77, 55, 33]
col3 = [66, 11, 88]
row = [col1, col2, col3]

for r in row:
    for c in r:
        print(c, end=' ')
    print()

# 列表生成式
myGirls = [f'staff-{i}' for i in range(10)]
print(myGirls)

# 浅拷贝 只会拷贝 1 层
myNewGirls = myGirls.copy()
print(myNewGirls)

# 深拷贝
myDeepGirls = copy.deepcopy(myGirls)
print(myDeepGirls)

# 元组 是只读列表，⼀旦创建，不可修改。只可进⾏查询、切⽚操作
pair = (1, 3, 5, 7, 9)
print(pair)

# 字段
student = {"age": 18, "name": "xiao"}
print(student)

student2 = dict(name="lisi", age=23)
print(student2)

# 新增
student["salary"] = 2100
# 新增 2
student.setdefault("job", "teacher")
# 修改
student["salary"] = 8900
print(student)
# 合并修改
student.update(student2)
print(student)

print(student.get("salary"))
print(student.get("notExist"))

# 先进后出的方式删除一个值
student.popitem()
print(student)
# 删除指定值
student.pop("age")
print(student)

# 字段循环
print(student.keys())
print(student.values())
# 推荐这种效率最高
for item in student:
    print(item, student[item])

# 批量生成字典
print(dict.fromkeys((1, 2, 3, 4), "sss"))

# 字典的长度
print(len(student))

# 清空
student.clear()

# -----集合----- ⽤集合来⼲2件事，去重和关系运算
a = {1, 2, 3, 4, 5}
a.add(9)
print(8 in a)
# 不能修改，⼀旦创建，不可修改⾥⾯的值
# 随机删除⼀个值，并返回该值
a.pop()
# 删除 3 这个元素，若3不在，报KeyError
a.remove(3)
print(a)

# 关系测试
five_man_fight_1girl = {"Alex", "peiqi", "PyYu", "OldVillageMaster", "Egon", "BlackGirl"}
# 交集
girls_game = {"Alex", "BlackGirl", "XiaoYun", "Celina"}
print(five_man_fight_1girl & girls_game)
print(five_man_fight_1girl.intersection(girls_game))
# 并集
print(five_man_fight_1girl | girls_game)
# 差集
print(five_man_fight_1girl - girls_game)
# 对称差集 两个集合中不同时存在的元素组成的集合
print(five_man_fight_1girl ^ girls_game)
print(five_man_fight_1girl.symmetric_difference(girls_game))
# 子集
print(five_man_fight_1girl.issubset(girls_game))
# 父集
print(five_man_fight_1girl.issuperset(girls_game))
